textview: Ensure popup menu is properly inserted
authorMatthias Clasen <mclasen@redhat.com>
Sun, 10 May 2020 13:16:32 +0000 (09:16 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 10 May 2020 20:25:28 +0000 (16:25 -0400)
In the presence of attached children, the css tree and the
widget tree are not in sync, so we need to explicitly set
the parent of the css node before inserting the widget, or
else we end up with critical warnings and a non-working
menu.

This can be seen in testtextview.

gtk/gtktextview.c

index b6ec008b1442c2903bd7a0d4961a72920219391f..d711ce5498b31f6bef1b95c0acaba8568c23ab6f 100644 (file)
@@ -8638,6 +8638,9 @@ gtk_text_view_do_popup (GtkTextView *text_view,
 
       model = gtk_text_view_get_menu_model (text_view);
       priv->popup_menu = gtk_popover_menu_new_from_model (model);
+      gtk_css_node_insert_after (gtk_widget_get_css_node (GTK_WIDGET (text_view)),
+                                 gtk_widget_get_css_node (priv->popup_menu),
+                                 priv->text_window->css_node);
       gtk_widget_set_parent (priv->popup_menu, GTK_WIDGET (text_view));
       gtk_popover_set_position (GTK_POPOVER (priv->popup_menu), GTK_POS_BOTTOM);